/*
    UFT-8 coded file
    кодировка файла - UFT-8
*/
#ifndef qDebugRedirect_h
#define qDebugRedirect_h


#include <stdio.h>
#include <stdlib.h>

#include <QtCore>
#include <QtDebug>


#if defined (Q_WS_X11) 
// Linux :
	/* nothing needs to be included here yet...*/
#elif defined (Q_WS_WIN) 
// Win :

#elif defined (Q_WS_MAC) 
// Mac:
	/* NOT SUPPORTED THIS VERSION */
#else
	/* NOT SUPPORTED THIS VERSION */
#endif

//-------------------------------------------------------
FILE *Otpd_DebugStream=stderr;

//-------------------------------------------------------
//на первую пору подойдет для перехвата и записывания в файл сообщений.
//! НЕ ПРОВЕРЕНО ПОД ВИНДОУС !!!!
void Otpd_MeggaseOutput(QtMsgType type, const char *msg)
 {
     switch (type) {
     case QtDebugMsg:
         fprintf(Otpd_DebugStream, "%s\n", msg);
         fflush(Otpd_DebugStream);//++2010.05.20
         break;
     case QtWarningMsg:
         fprintf(Otpd_DebugStream, "[Warning]: %s\n", msg);
         fflush(Otpd_DebugStream);//++2010.05.20
         break;
     case QtCriticalMsg:
         fprintf(Otpd_DebugStream, "[Critical]: %s\n", msg);
         fflush(Otpd_DebugStream);//++2010.05.20
         break;
     case QtFatalMsg:
         fprintf(Otpd_DebugStream, "[Fatal]: %s\n", msg);
         fflush(Otpd_DebugStream);//++2010.05.20
         abort();
     }
 };

//    qInstallMsgHandler(Otpd_MeggaseOutput);
//    qInstallMsgHandler(0).
//-------------------------------------------------------
//устанавливаем перехват сообщений в файл
int Otpd_OpenFileForDebugMessages(const char *filelog)
   {
	if (Otpd_DebugStream==stderr)
	     {
		if((Otpd_DebugStream=fopen(filelog, "wb")) == NULL) 
		    {
			printf("Не удаётся открыть файл.\n");
                        return -1; //++2010.05.24
                        //exit(-1);
		    };
		qInstallMsgHandler(Otpd_MeggaseOutput);
	     };
        return 0; //++2010.05.24
   };
//-------------------------------------------------------
//снимаем перехват сообщений из файла
void Otpd_CloseFileForDebugMessages()
{
	if (Otpd_DebugStream!=stderr)
	     {
		fclose(Otpd_DebugStream);
		Otpd_DebugStream=stderr;
	     };
}

#endif
